Rehaul: judge panel, pre-registered attribution, demos, manifest, claims ledger - #5
Open
Al-Scripting wants to merge 10 commits into
Open
Rehaul: judge panel, pre-registered attribution, demos, manifest, claims ledger#5Al-Scripting wants to merge 10 commits into
Al-Scripting wants to merge 10 commits into
Conversation
- validate_payload rejects non-finite floats (a crafted save with a valid hash could inject NaN into the scorer silently) - test_python_dash_m_embr no longer hardcodes the author's S:/ path - console-script entry point gets a consistency test - web demo caps request body at 1 MB - Mnemosyne baseline venv path follows the platform instead of assuming Windows
- assets/build_manifest.py generates data/release-manifest.json from a real pytest run; one source of truth for status - docs/architecture.md: module map, five-signal scorer, end-to-end turn flow - docs/claims-ledger.md: what is supported, design-only, withdrawn, unsafe - docs/related-work-2026-09-additions.md: positioning after the literature sweep - paper/: LaTeX skeleton + verified refs.bib (MINJA flagged for verification) - artifact-dependent tests skip cleanly when data/runs is absent instead of erroring
- Chain-of-Emotion: four authors had wrong given names; fixed from PLOS ONE - MemPoison: first author Gao not Wei; key renamed - Four authorless entries got verified authors/titles/venues - 33 entries, sectioned; MINJA and TokenShapley author lists flagged for verification
…e loop from the harness The headline was the affect-as-index flip, which the claims ledger records as an algebraic property of the scorer rather than a result. The README now leads with the loop that was measured: an attacker-written affect tag moves the appraised mood, mood congruence rewards that same memory, nine of ten plants reach the top five, and zeroing the mood weight leaves six. The loop figure is an SVG built by assets/build_animations.py. Its three numbers are recomputed from eval.attribution on the stub at build time, so the figure cannot drift from the table, and a test pins that they are the harness's values rather than typed ones. The figure is registered with the other mechanism figures so one command rebuilds it and writes its note.
… explain every retrieval The middleware claim rested on Python import and the demo server, neither of which a game engine can call. embr/serve.py is the seam: one persisted Conversation per NPC under data/npcs/, four routes, stdlib only. A turn returns the reply, the state it left, the prompt, and each retrieved memory with its per-signal breakdown. Conversation.tag_event applies the write-boundary policy the findings argue for: everything that arrives in play is external, and the affect tag is recorded as external only when the client supplied the numbers. Under the defended scorer that stamp is what the anchor reads, so a client that never writes affect metadata gets the 6/10 posture by default. Turn.breakdown carries the scorer's per-signal contributions for every retrieved memory. Building the server surfaced a pipeline bug: an empty store passed to Conversation was falsy through its length and silently replaced by a fresh in-memory one. Fixed at the constructor, with a test.
…y belong, and manage the project with uv The library, the harness, and the web demo now live under src/. The menu is src/embr/cli/menu.py with a shim at the repo root, and the demo suite sits beside it, because the applet is the one layer allowed to import everything. The paper asset builders move from assets/ into the harness as eval.report, since they read runs and reuse eval scenarios; assets/ is media and templates only. The portrait cutout tool goes to scripts/, with a fetch script for every model the project uses. Packaging switches from setuptools to hatchling with pytest in a dependency group, so uv sync is the whole setup. The wheel contains embr, eval, and web and nothing else. Every repo-root lookup that moved deeper is corrected, and every path in the docs points at the new location.
… the menu is its view embr with no arguments opens the menu, as before. embr <command> runs the same handler the menu row calls, grouped as eval, mechanism, assets, demo, and saves, with --help on every level and a non-zero exit with the menu's own hint when something fails. Commands that wrap a harness module hand their arguments straight through, so nothing the module accepts is lost. The menu shows each row's shell spelling on a wide terminal, and a test pins that every spelling parses to a runnable. The asset build is one function shared by the menu and the command, instead of two copies of the same step list. The console script, python -m embr, and the root menu.py all land on the same main.
…s as implemented, the phase briefs into history The design doc's composite score now states every signal as the scorer computes it, including the [0, 1] remap on mood congruence and the optional provenance anchor, both of which the sketch had left out. The handoff's setup is uv sync and the fetch script, and the stale test count points at the manifest. The phase briefs, the roadmap, and the intern onboarding move to docs/history/ with every link into and out of them corrected, so docs/ is the live description and nothing else. The README's tree and quick start describe the src layout and the applet's commands.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Supersedes #4. This branch contains every phase-4 commit plus the work since: the judge panel, the pre-registered attribution sweep, the web demo, the save slots and dashboard, the September audit fixes, and the structural rehaul (release manifest, architecture doc, claims ledger, paper skeleton).
What lands
OllamaRunner,OuroRunner) behind the existingModelRunnerseam, with the transformers 4.x pin Ouro needs.docs/claims-ledger.md.data/release-manifest.json) built from the pytest JSON report, so the README stops hand-maintaining test counts.Verification, honestly
At HEAD the suite is 527 passed, 2 failed, 8 errors, 4 skipped. All ten red are in
tests/test_build_results.pyand share one cause: the results page pinsrq2_mcnemar_pfromrq2.poisoning_stats, which the harness now writes but the on-disk primary run (2026-08-17) predates. The eval box rerun (python -m eval.run, thenpython assets/build_manifest.py) regenerates that run and the manifest. Do not merge before that commit lands on this branch.The manifest currently on the branch was built at 4f123fc on a dirty tree and records the red suite. It gets rebuilt in the same rerun.